package edu.upc.clase.demo.controller;

import edu.upc.clase.demo.entity.CriterioBusqueda;
import edu.upc.clase.demo.entity.Categoria;
import edu.upc.clase.demo.service.CategoriaService;
import edu.upc.clase.demo.service.EstadoService;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.support.SessionStatus;
import org.springframework.web.servlet.ModelAndView;

/**
 *
 * @author Carlos
 */
@Controller("CategoriaController")
public class CategoriaController {
    
    @Autowired
    private CategoriaService categoriaService;
      
    @Autowired
    private EstadoService estadoService;
    
    private static Logger log = LoggerFactory.getLogger(CategoriaController.class);
    
    
    @RequestMapping("/Categoria/index")
    public ModelAndView index() {
        ModelAndView mav = new ModelAndView("Categoria/index");
        List<Categoria> Categorias = categoriaService.buscarTodos();
        CriterioBusqueda criterioBusqueda = new CriterioBusqueda();
        mav.addObject("categoria", Categorias);
        mav.addObject("criterioBusqueda",criterioBusqueda);
        return mav;
    }
    
       
    @RequestMapping(value = "/Categoria/new", method = RequestMethod.GET)
    public ModelAndView newCategoria() {
       
        ModelAndView mav = new ModelAndView("Categoria/new");
        Categoria categoria = new Categoria();       
        mav.getModelMap().put("categoria", categoria);
        mav.addObject("estado", estadoService.buscarCodigo("01"));
                  
        return mav;
     }

    @RequestMapping(value = "/Categoria/new", method = RequestMethod.POST)
    public String createCategoria(@ModelAttribute("categoria")Categoria Categoria, SessionStatus status) {    
        categoriaService.insertar(Categoria);
        status.setComplete();
        return "redirect:/pages/Categoria/index";
        
    }
    
    @RequestMapping(value = "/Categoria/edit", method = RequestMethod.GET)
    public ModelAndView editcategoria(@RequestParam("idCategoria")Integer idCategoria) {    
        ModelAndView mav = new ModelAndView("Categoria/edit");
        Categoria Categoria = categoriaService.buscar(idCategoria);
        mav.getModelMap().put("categoria", Categoria);
        mav.addObject("estado", estadoService.buscarCodigo("01"));
        return mav;        
    }
    
    @RequestMapping(value="/Categoria/edit", method=RequestMethod.POST)
    public String update(@ModelAttribute("categoria") Categoria Categoria, SessionStatus status) {
        categoriaService.actualizar(Categoria);
        status.setComplete();
        return "redirect:/pages/Categoria/index";
    }
    
    @RequestMapping("/Categoria/delete")
    public ModelAndView delete(@RequestParam("idCategoria")Integer idCategoria)
    {
        ModelAndView mav = new ModelAndView("redirect:/pages/Categoria/index");
        Categoria Categoria = categoriaService.buscar(idCategoria);
        categoriaService.eliminar(Categoria);
        return mav;
    }
     
    
    @RequestMapping(value = "/Categoria/buscar", method=RequestMethod.POST)
    public ModelAndView buscar(@ModelAttribute("criterioBusqueda") CriterioBusqueda criterio, SessionStatus status) {
        ModelAndView mav = new ModelAndView("Categoria/resultadoBusqueda");
        log.info("categoria = " + categoriaService.buscarPorNombre(criterio.getNombre()).size());
        mav.getModel().put("categoria",categoriaService.buscarPorNombre(criterio.getNombre()));
        return mav;
    }
    
}
